Android Package Manager 深度解析

📚 共计 30 章节
01
Package Manager 概述
什么是Package Manager?它在Android系统中的定位与核心职责。
定位职责
02
系统架构总览
PMS在SystemServer中的启动流程,与AMS、WMS等核心服务的关系。
SystemServerAMSWMS
03
核心数据结构(上)
Package、PackageParser、PackageSetting、PackageUserState 源码级解析。
PackageParserSetting
04
核心数据结构(下)
SharedUserSetting、GrantedPermissions、PermissionEntry 源码级解析。
SharedUserPermission
05
APK解析流程(上)
PackageParser 如何解析 AndroidManifest.xml,从二进制XML到内存对象。
Manifest二进制XML
06
APK解析流程(下)
解析四大组件、权限、intent-filter 的细节与常见坑。
四大组件intent-filter
07
安装流程(上)
ADB安装与PackageInstaller的发起流程,从Session创建到数据拷贝。
ADBSession
08
安装流程(中)
StagingManager 与 预安装检查,签名校验与证书链验证。
Staging签名校验
09
安装流程(下)
dex2oat 优化、权限授予、安装完成广播的发送。
dex2oat广播
10
卸载流程
PackageManager.deletePackage() 的完整链路,数据清理与广播通知。
卸载数据清理
11
权限管理机制(上)
权限定义、权限请求、运行时权限的底层实现。
运行时权限定义
12
权限管理机制(下)
PermissionController、AppOps、权限组与特殊权限。
AppOps特殊权限
13
Intent 解析与 Activity 启动
PMS如何配合AMS解析Intent,找到目标Activity。
IntentActivity
14
包信息查询
getPackageInfo、getInstalledPackages、queryIntentActivities 的内部实现。
查询API
15
多用户支持
UserManager 与 PMS 的协作,每个用户独立的包管理状态。
多用户UserManager
16
存储管理
A/B分区、SDK沙箱、ASEC容器、App数据目录的创建与迁移。
分区ASEC
17
包扫描与缓存
Boot-time scan、PackageCache、PackageSetting 的持久化。
扫描缓存
18
签名机制
v1、v2、v3、v4 签名的原理与验证流程,签名冲突的处理。
v2签名v3签名
19
动态代码加载
DexClassLoader、PathClassLoader 与 PMS 的关系,插件化基础。
插件化ClassLoader
20
系统应用管理
系统应用与普通应用的区别,系统应用的更新与回滚机制。
系统应用回滚
21
包冻结与禁用
disable、hide、suspend 三种状态的实现与区别。
冻结禁用
22
权限策略与角色
RoleManager、PermissionPolicyManager 如何影响 PMS 决策。
RoleManager策略
23
包管理器的扩展
PackageManagerCompat、Archives、Split APK 的支持。
Split APKCompat
24
性能优化
PMS 启动速度优化、延迟扫描、增量编译策略。
启动优化增量编译
25
调试与日志
PMS 相关 logcat 标签、dumpsys package 命令详解。
logcatdumpsys
26
常见问题排查
安装失败(INSTALL_FAILED_*)、权限拒绝、签名冲突的排查思路。
安装失败权限拒绝
27
源码阅读方法
如何高效阅读 PMS 源码,推荐工具与切入点。
源码工具
28
与 Android 新版本演进
PMS 在 Android 12/13/14 中的关键变化。
Android 1214
29
实战:自定义 PackageManager 模拟器
实现一个轻量级 PMS 核心逻辑。
实战模拟器
30
总结与展望
PMS 的未来趋势,对应用开发与系统开发者的启示。
趋势启示